// main.rs
mod lexer;
mod parser;
mod token;

use parser::Parser;

fn main() {
   let input = "3 + 4 * 2 / (1 - 5)^2";
   let lexer = lexer::Lexer::new(input);
   let mut parser = Parser::new(lexer);
   let ast = parser.parse();
   // 为每个运算符分配优先级数值和结合性规则：
   // 运算符	优先级	结合性
   // ^	       4	    右结合
   // * / %	   3	    左结合
   // + -	     2	    左结合
   // ( )	     0	   特殊处理
   println!("{:#?}", ast);

   println!("Result: {}", ast.evaluate());
}
